package com.mybatis.mapper;

import com.mybatis.domain.Emp;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author 24040
 * @name EmpMapper
 * @date 2022-08-07 21:35
 */
public interface EmpMapper{

    /**
     * 查询员工信息
     * @return
     * 解决数据库中的字段名 和 实体类属性名 不一致的问题
     * 1.mapUnderscoreToCamelCase 可以在表查询的过程中，自动的将带有_字段名的字段名，转换为驼峰式名，然后再进行映射
     * 2.给字段名起别名
     * 3.使用resultMap 自定义映射关系
     */
    List<Emp> getAllEmpOld();

    List<Emp> getAllEmp();

    /**
     * 查询员工以及员工所对应的部门信息
     * 1.级联方式处理多对一的映射关系
     */
    Emp getEmpAndEmp(@Param("eid") Integer eid);


    /**
     * 查询员工以及员工所对应的部门信息
     * 2.使用association进行多对一关系的处理
     * property 为属性名
     * javaType 为实体类类型
     * @param eid
     * @return
     */
    Emp getAllEmpAndDept (@Param("eid") Integer eid);

    /**
     * 分步查询
     * 查询员工以及员工所对应的部门
     * 第一步：先去查询员工信息
     * @param eid
     * @return
     */
    Emp getAllEmpAndDeptByStepOne(@Param("eid") Integer eid);


    /**
     * 通过分布查询查询部门以及部门所有的员工信息
     * 分布查询第二步：根据did查询员工信息
     * @param did
     * @return
     */
    List<Emp> getDeptAndEmpByStepTwo(@Param("did") Integer did);
}
